#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/stat.h>
int main()
{

  //    pid_t sid =  getsid(getpid());//获取当前进程的会话id
  //    printf("会话id = %d\n",sid);
  //
  //    //新建会话
  //    pid_t s = setsid();//创建失败，组长进程不能创建新的会话 
  //    printf("新建会话的返回值：%d\n",s);

  //创建守护进程步骤

  //1.创建子进程 父进程退出
  pid_t id = fork();
  if(id==-1)
  {
    perror("fork");
    return 1;
  }
  if(id>0)
  {
    //父进程退出
    exit(0);
  }
  //2.创建新的会话,完全脱离控制终端
  pid_t s =  setsid();
  if(-1 == s)
  {
    perror("setsid");
    return 1;
  }

  //3.改变当前的工作目录
  int ret = chdir("/");
  if(-1==ret)
  {
    perror("chdir");
    return 1;
  }
  //4.设置权限掩码
  umask(0);
  //5.关闭文件描述符
   close(STDIN_FILENO);
   close(STDOUT_FILENO);
   close(STDERR_FILENO);
  //6.执行核心工作
  //每隔一秒钟输出当前时间到txt.log
  while(1)
  {
    system("date >> /tmp/txt.log");
    sleep(1);
  }
  return 0;
}
